www.gusucode.com > C++ 创建线程互斥对象-源码程序 > C++ 创建线程互斥对象-源码程序\code\互斥对象.cpp
#include <windows.h> //包含头文件 #include <stdio.h> //Download by http://www.NewXing.com DWORD WINAPI myfun1( //声明线程函数 LPVOID lpParameter ); DWORD WINAPI myfun2( LPVOID lpParameter ); HANDLE hmutex; int a=0; //定义全局变量a main() { hmutex=::CreateMutex(NULL,FALSE,NULL); //创建互斥对象并返回其句柄 HANDLE h1,h2; //定义线程句柄 h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL); //创建线程1 printf("线程1开始运行!\r\n"); h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL); //创建线程2 printf("线程2开始运行!\r\n"); ::CloseHandle(h1); //关闭线程句柄对象 ::CloseHandle(h2); ::Sleep(100000); //程序睡眠10秒 return 0; } DWORD WINAPI myfun1(LPVOID lpParameter) //线程函数1 { while(1) { ::WaitForSingleObject(hmutex,INFINITE); //请求事件对象 if(a<10000) { a+=1; //变量自加 ::Sleep(1000); //线程睡眠1秒 printf("线程1:%d\r\n",a); ::ReleaseMutex(hmutex); //释放互斥对象句柄 } else { ::ReleaseMutex(hmutex); //释放互斥对象句柄 break; //跳出循环 } } return 0; //线程 } DWORD WINAPI myfun2(LPVOID lpParameter) //线程函数2 { while(1) { ::WaitForSingleObject(hmutex,INFINITE); //请求事件对象 //设置事件对象为无信号状态 if(a<10000) { a+=1; ::Sleep(1000); printf("线程2:%d\r\n",a); //输出变量 ::ReleaseMutex(hmutex); //释放互斥对象句柄 } else { ::ReleaseMutex(hmutex); //释放互斥对象句柄 break; //跳出循环 } } return 0; //线程正常退出 }